unit FStrUtiles;

interface

uses StrUtils,classes,sysutils;

function Strleft(cadena:String;cantidad:Integer):String;
function StrRight(cadena:String;cantidad:Integer):String;
function getIndexPosFromSTR(cadena,caracter:String; inicio:Integer=1; inverso:Boolean=false):Integer;
function SplitSTR(cadena,caracter:String):TStringList;
function ExistsIn(palabra:String;arArray:TStringList):Boolean;
function UC(palabra:string):String;
function LC(palabra:String):String;

implementation

function StrLeft(cadena:String;cantidad:Integer):String;
var longitud:Integer;
begin
  longitud := Length(cadena);
  if cantidad > longitud then begin
    StrLeft := AnsiMidStr(cadena,1,longitud);
  end else begin
    StrLeft := AnsiMidStr(cadena,1,cantidad);
  end;
end;

function StrRight(cadena:String;cantidad:Integer):String;
var longitud:Integer;
begin
  longitud := Length(cadena);
  if cantidad > longitud then begin
    StrRight := AnsiMidStr(cadena,1,longitud);
  end else begin
    StrRight := AnsiMidStr(cadena,(longitud-cantidad+1),cantidad);
  end;
end;

function getIndexPosFromSTR(cadena,caracter:String; inicio:Integer=1; inverso:Boolean=false):Integer;
var i,fin,resultado,lonmax,puntero:Integer;
begin
  //Devuelve la posicion del caracter buscado en la cadena.
  resultado := -1;
  lonmax := Length(cadena);
  if inicio<=Length(cadena) then begin
    puntero := inicio;
    if inverso then   fin := inicio
    else              fin := lonmax - inicio;
    for i:=0 to fin do begin
      if cadena[puntero]=caracter then begin
        resultado := puntero;
        break;
      end;
      if inverso then  dec(puntero,1)
      else             inc(puntero,1);
    end;
  end;
  Result := resultado;
end;

function SplitSTR(cadena,caracter:String):TStringList;
var ipos:Integer;
  rArray:TStringList;
  extension:String;
label buscar;
begin
  //Splitea el String
  rArray := TStringlist.Create;
buscar:
  ipos := getIndexPosFromStr(cadena,caracter,1,false); // -1;
  if ipos>1 then begin
    extension := Trim(StrLeft(cadena,ipos - 1));
    cadena := StrRight(cadena,Length(cadena)-ipos);
    if  extension<>'' then rArray.Add(extension);
    goto buscar;
  end else begin
    extension := Trim(cadena);
    if extension <> '' then rArray.Add(extension);
  end;
  SplitStr := rArray;
end;

function ExistsIn(palabra:String;arArray:TStringList):Boolean;
var vExiste:Boolean; i:Integer;
begin
  //
  vExiste := False;
  for i:=0 to (arArray.Count-1) do begin
    if arArray[i]=palabra then vExiste := vExiste or True;
  end;
  ExistsIn := vExiste;
end;

function UC(palabra:string):String;
begin
  Result := UpperCase(palabra);
end;

function LC(palabra:String):String;
begin
  Result := LowerCase(palabra);
end;

end.
